On team organization
Note: this page is part of the “Essays on Software Engineering”
Over the years, I noticed many teams are organized around three main roles:
- Software Engineer (SWE): design, architect systems and write code.
- Engineering Manager (EM): coordinate the life of the team, ensure work is being done, cares about promotion
- Product Manager (PM): interface between the customers and the engineering team, define the specification
There are some additional roles that comes into play, such as SWET (Software Engineer in Testing) or SRE (System Reliability Engineering).
Most of teams I have seen have at least one EM, few SWE and (sometimes) one PM. But the other roles (SWET and SRE) are definitely not always present and sometimes, part of a totally separate organization.
In addition, there is always no specific role to review the documentation, either internally or externally. And this part of the software development becomes outdated very quickly.
But lack of tests is what makes software unstable or introduce regressions. Lack of documentation is what makes it hard to maintain. These aspects are very often overlooked on the short term but have consequences on the long term.
There should be two ways to solve this problem:
- Reduce the number of SWE and add more SWET. Let the software engineer focus on writing code and let the SWET focus on writing code. This solution has the benefit of introducing independent testing: the test is not written by the author of the implementation. Similarly, with such an approach, an editor should also maintain the documentation of the system. Having an independent qualified editor would make sure the documentation is correctly written and does not skip any detail.
- Make testing and documentation an evaluation criteria for SWE. Often, testing and documentation are overlooked by SWE because they do not consider them valuable. EM should introduce incentives to write good documentation and penalize engineers not writing enough tests or documentation.